SAKURA API †任何外部進程都可以從遠程控制偽春菜,或通過發送WM_SAKURAAPI給偽春菜進程來低成本的獲取偽春菜的內部信息。 WM_SAKURAAPI = RegisterWindowMessage("Sakura"); SAKURA API只使用窗口消息WM_SAKURAAPI,具體命令是通過參數“wparam”和“lparam”來控制的。 wParam列表 †
SAKURA API/1.0 †SAKURA API/1.0是處理一般EXECUTE命令的請求。 SA_EXECUTEREMAKEMENU / wparam = 0 / lparam = n/a
SA_EXECUTEREWRITEFMO / wparam = 1 / lparam = n/a
SA_EXECUTENOTIFYOTHERGHOSTNAME / wparam = 4 / lparam = n/a SAKURA API/1.1 †SAKURA API/1.1處理一般GET命令的請求。 SA_GETHEADCOLLISIONRECTSAKURA / wparam = 128 / lparam = 0 - 3 SA_GETFACECOLLISIONRECTSAKURA / wparam = 129 / lparam = 0 - 3 SA_GETBUSTCOLLISIONRECTSAKURA / wparam = 130 / lparam = 0 - 3
SA_GETCENTERPOINTSAKURA / wparam = 131 / lparam = 0 - 1
SA_GETHEADCOLLISIONRECTKERO / wparam = 133 / lparam = 0 - 3 SA_GETFACECOLLISIONRECTKERO / wparam = 134 / lparam = 0 - 3 SA_GETBUSTCOLLISIONRECTKERO / wparam = 135 / lparam = 0 - 3
SA_GETCENTERPOINTKERO / wparam = 136 / lparam = 0 - 1
下面這個API是用來返回人格的當前狀態。返回值意義如下。 SA_GETGHOSTSTATE / wparam = 140 / lparam = n/a
SAKURA API/1.2 †SAKURA API/1.2是獲得KINOKO絕對領域(AKF)的請求。 SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA / wparam = 132 / lparam = 0 - 1
SA_GETABSOLUTEKINOKOFIELDCENTERPOINTKERO / wparam = 137 / lparam = 0 - 1 SAKURA API/1.3 †SAKURA API/1.3 是通知事件的請求。 SA_GETPROCESSID / wparam = 138 / lparam = n/a
SA_GETSHAREDMEMORY / wparam = 139 / lparam = -1 - 7 外部進程通知事件給偽春菜用以上所示的兩種類型的信息。具體來說,首先,希望通知事件的外部進程必須使用SA_GETPROCESSID得到進程
ID。接下來,通過使用函數“openprocess”打開進程。然後,通過使用函數WriteProcessMemory向
SA_GETSHAREDMEMORY獲得的指針寫入所需的資料,最後,向偽春菜發送事件定義消息。當偽春菜收到事件請求時,根據從
SHAREDMEMORY的每個插槽獲取的信息識別事件並適當的運行(在此之際,偽春菜主要是通知事件給SHIORI。)。 插槽編號-1是為特殊用途使用。例如,當您使用SAKURA API/1.3通知事件給SHIORI/2.2時,插槽0-7對應於關於SHIORI規範的Reference0-7,-1用於事件的標識符。 SA_NOTIFYEVENT / wparam = 256 / lparam = n/a SAKURA API/1.4 †執行最小化。如果已經最小化,執行恢復。 SA_EXECUTEWINDOWSTATESWITCH / wparam = 2 / lparam = n/a SAKURA API/1.5 †重載當前人格的SHIORI模塊。 SA_EXECUTERELOADSHIORI / wparam = 3 / lparam = n/a 其他 †FMO變更時給其他進程的通知 #define SAKURA_API_BROADCAST_GHOSTCHANGE 1024 WM_SAKURAAPI = RegisterWindowMessage("Sakura"); SendNotifyMessage(HWND_BROADCAST,WM_SAKURAAPI,SAKURA_API_BROADCAST_GHOSTCHANGE,m_ProcID); 上述、更新FMO側 •message = Sakura API相同 •wParam = 1024 •lParam = SSP自己的進程ID 人格變化後對所有程序主窗體廣播FMO的更新通知。 #define SAKURA_API_BROADCAST_GHOSTCHANGE 1024 WM_SAKURAAPI = RegisterWindowMessage("Sakura"); int CALLBACK WindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ){ case WM_SAKURAAPI: if ( wParam == SAKURA_API_BROADCAST_GHOSTCHANGE ) { if ( lParam != GetCurrentProcessId() ) { 做些什麼; } } } 接收側可以按更新的通知檢查。 外部連結 † |